classDiagram
    title 商品管理子系统类图 | Product Management Subsystem Class Diagram
    
    %% 核心实体类 | Core Entity Classes
    class Category {  %% 分类类
        -id: int  %% 分类ID
        -name: string  %% 分类名称
        -description: string  %% 分类描述
        -created_at: datetime  %% 创建时间
        
        %% 公有方法 | Public Methods
        +createCategory(name: string, description: string): Category  %% 创建分类
        +getAllCategories(): List[Category]  %% 获取所有分类
        +getCategoryById(id: int): Category  %% 根据ID获取分类
        +updateCategory(id: int, name: string, description: string): Category  %% 更新分类
        +deleteCategory(id: int): void  %% 删除分类
        
        %% Getter方法 | Getter Methods
        +getId(): int  %% 获取分类ID
        +getName(): string  %% 获取分类名称
        +getDescription(): string  %% 获取分类描述
        +getCreatedAt(): datetime  %% 获取创建时间
        
        %% Setter方法 | Setter Methods
        +setName(name: string): void  %% 设置分类名称
        +setDescription(description: string): void  %% 设置分类描述
    }
    
    class Product {  %% 商品类
        -id: int  %% 商品ID
        -title: string  %% 商品标题
        -description: string  %% 商品描述
        -price: float  %% 商品价格
        -original_price: float  %% 原价
        -status: ProductStatus  %% 商品状态
        -seller_id: int  %% 卖家ID
        -category_id: int  %% 分类ID
        -view_count: int  %% 浏览次数
        -created_at: datetime  %% 创建时间
        -updated_at: datetime  %% 更新时间
        
        %% 公有方法 | Public Methods
        +createProduct(seller_id: int, category_id: int, title: string, price: float): Product  %% 创建商品
        +getProductById(id: int): Product  %% 根据ID获取商品
        +updateProduct(id: int, title: string, description: string, price: float): Product  %% 更新商品
        +deleteProduct(id: int): void  %% 删除商品
        +searchProducts(keyword: string): List[Product]  %% 搜索商品
        +incrementViewCount(): void  %% 增加浏览次数
        +markAsSold(): void  %% 标记为已售出
        +getProductsByCategory(category_id: int): List[Product]  %% 获取分类下的商品
        +getProductsBySeller(seller_id: int): List[Product]  %% 获取卖家的商品
        
        %% Getter方法 | Getter Methods
        +getId(): int  %% 获取商品ID
        +getTitle(): string  %% 获取商品标题
        +getDescription(): string  %% 获取商品描述
        +getPrice(): float  %% 获取商品价格
        +getOriginalPrice(): float  %% 获取原价
        +getStatus(): ProductStatus  %% 获取商品状态
        +getSellerId(): int  %% 获取卖家ID
        +getCategoryId(): int  %% 获取分类ID
        +getViewCount(): int  %% 获取浏览次数
        +getCreatedAt(): datetime  %% 获取创建时间
        +getUpdatedAt(): datetime  %% 获取更新时间
        
        %% Setter方法 | Setter Methods
        +setTitle(title: string): void  %% 设置商品标题
        +setDescription(description: string): void  %% 设置商品描述
        +setPrice(price: float): void  %% 设置商品价格
        +setOriginalPrice(original_price: float): void  %% 设置原价
        +setStatus(status: ProductStatus): void  %% 设置商品状态
        +setCategoryId(category_id: int): void  %% 设置分类ID
    }
    
    class ProductImage {  %% 商品图片类
        -id: int  %% 图片ID
        -product_id: int  %% 商品ID
        -image_url: string  %% 图片URL
        -is_primary: boolean  %% 是否为主图
        -created_at: datetime  %% 创建时间
        
        %% 公有方法 | Public Methods
        +addImage(product_id: int, image_url: string): ProductImage  %% 添加图片
        +setAsPrimary(): void  %% 设置为主图
        +removeImage(): void  %% 删除图片
        +getImagesByProduct(product_id: int): List[ProductImage]  %% 获取商品的所有图片
        +getPrimaryImage(product_id: int): ProductImage  %% 获取商品的主图
        
        %% Getter方法 | Getter Methods
        +getId(): int  %% 获取图片ID
        +getProductId(): int  %% 获取商品ID
        +getImageUrl(): string  %% 获取图片URL
        +getIsPrimary(): boolean  %% 获取是否为主图
        +getCreatedAt(): datetime  %% 获取创建时间
        
        %% Setter方法 | Setter Methods
        +setImageUrl(image_url: string): void  %% 设置图片URL
        +setIsPrimary(is_primary: boolean): void  %% 设置是否为主图
    }
    
    class ProductList {  %% 商品列表类
        -products: List[Product]  %% 商品列表
        -total_count: int  %% 总商品数
        -page_size: int  %% 每页大小
        -current_page: int  %% 当前页码
        -sort_by: string  %% 排序字段
        -sort_order: string  %% 排序顺序
        
        %% 公有方法 | Public Methods
        +addProduct(product: Product): void  %% 添加商品到列表
        +removeProduct(product_id: int): void  %% 从列表移除商品
        +getProductById(product_id: int): Product  %% 根据ID获取商品
        +getProducts(): List[Product]  %% 获取当前页商品列表
        +getTotalCount(): int  %% 获取总商品数
        +setPageSize(size: int): void  %% 设置每页大小
        +setCurrentPage(page: int): void  %% 设置当前页码
        +setSorting(field: string, order: string): void  %% 设置排序方式
        +filterByCategory(category_id: int): ProductList  %% 按分类过滤
        +filterByStatus(status: ProductStatus): ProductList  %% 按状态过滤
        +filterByPriceRange(min_price: float, max_price: float): ProductList  %% 按价格范围过滤
        +search(keyword: string): ProductList  %% 搜索商品
        
        %% Getter方法 | Getter Methods
        +getPageSize(): int  %% 获取每页大小
        +getCurrentPage(): int  %% 获取当前页码
        +getSortBy(): string  %% 获取排序字段
        +getSortOrder(): string  %% 获取排序顺序
    }
    
    %% 枚举类 | Enumeration Class
    class ProductStatus {  %% 商品状态枚举
        <<enumeration>>
        AVAILABLE  %% 可用
        SOLD  %% 已售
        DELETED  %% 已删除
    }
    
    %% 关联关系 | Association Relationships
    Category "1" -- "*" Product : contains  %% 包含
    Product "1" -- "*" ProductImage : has  %% 拥有
    Product "1" -- "1" ProductStatus : has  %% 拥有
    Product "1" -- "1" User : soldBy  %% 由...出售
    Product ..> ProductStatus : uses  %% 使用
    ProductList "1" -- "*" Product : manages  %% 管理
    ProductList ..> ProductStatus : uses  %% 使用
    ProductList ..> Category : filters_by  %% 按...过滤